<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>let和const命令</title>
  <style>
    li, div, p {
      line-height: 40px;
    }
    span {
      color: red;
    }
  </style>
</head>
<body>
  <h2>let命令</h2>
  <ul>
    <li>
      ES6中明确规定，如果区块中存在let和const命令，则这个区块对这些命令声明的变量从一开始就形成封闭作用域。只要在声明之前就使用这些变量，就会报错
    </li>
  </ul>
  <h2>const命令</h2>
  <ul>
      <li>const声明一个只读的常量。一旦声明，常量的值就不能改变</li>
      <li>const声明的常量，一旦声明，就必须<span>立即赋值</span>,不能留到以后以后再赋值</li>
      <li>
        const实际上保证的并不是变量的值不得改动，而是<span>变量所指向的那个内存地址不得改动</span>。对于对象和数组类型而言，变量指向的内存地址保存的只是一个指针，const只能保证这个指针是固定的，至于它指向的数据结构是不是可变的，这完全不受控制
      </li>
  </ul>
  <h2>ES6声明变量的方式</h2>
  <p>var， function, let, const, import, class</p>
  <h2>顶层对象的属性</h2>
  <ul>
    <li>顶层对象在浏览器环境中指的是window对象，在Node环境中指的是global对象。在ES5，顶层对象的属性与全局变量是等价的</li>
    <li>
      ES6规定，除了var 与function,其他的全局变量不属于顶层对象的属性<span>(注意依旧存在全局变量，只不过全局变量与顶层对象的属性隔离了)</span>
    </li>
  </ul>
</body>
</html>